// 1. 实现 Pick 快速抓取属性
type Pick<T, K extends keyof T> = {
  [P in K]: T[P]
}

/**
 * 需求： 现在只需要 Book 里面的一些属性 例如 ISBN book_name book_price
 * 1. 再定义一个book2 这个不可取，万一名字有变化就麻烦，代码臃肿维护不好
 * 2. 用可选择属性，那么我只要前两个呢，这是又需要再次修改代码，不可取
 * 3. 把全部属性设置为可选属性，这样做在一些底层源码中是存在的，但在这里的话是不合适的 不可取
 *    例如我定义的时候 let book: Book = {} 什么都不写 也不报错 这也非常不好，而且写一个属性也报错 和需求是不符合的 不可取
 * 用Pick 解决以上问题
 */
interface Book {
  ISBN: string
  book_name: string
  book_price: number //
  book_store_count: string //库存数量
  book_publish: string // 出版社
}

/**
 * type PickType = {
    ISBN: string;
    book_name: string;
    book_publish: string;
  }
 */
type Picktype = Pick<Book, 'ISBN' | 'book_name' | 'book_publish'>
let pickobj: Picktype = {
  ISBN: '101-101',
  book_name: '解放大西南',
  book_publish: '23.4',
}
type Picktype2 = Pick<Book, 'ISBN' | 'book_name'>
let pickobj2: Picktype2 = {
  ISBN: '101-101',
  book_name: '解放大西南',
}

export {}
